package com.lpc.test.httpclient.keystore;
/**
 * 
 * @ClassName:ExportCertFormKeystore
 * @Description: keytool是一个Java数据证书的管理工具,
keytool将密钥（key）和证书（certificates）存在一个称为keystore的文件中在keystore里，
包含两种数据：
密钥实体（Key entity）——密钥（secret key）又或者是私钥和配对公钥（采用非对称加密）
可信任的证书实体（trusted certificate entries）——只包含公钥
ailas(别名)每个keystore都关联这一个独一无二的alias，这个alias通常不区分大小写
 * @author: lpc
 * @date:2016年12月20日下午10:39:02
 */
public class ExportCertFormKeystore {

	public  void executeCommand(String[] arstring) {
		for (int i = 0; i < arstring.length; i++) {
			System.out.println(arstring[i] + "");
		}
		try {
			Runtime.getRuntime().exec(arstring);
		} catch (Exception e) {
			System.out.println(e.getMessage());
		}
	}
	
	public void executeCommand(String arstringCommand){
		try {
			Runtime.getRuntime().exec(arstringCommand);
		} catch (Exception e) {
			System.out.println(e.getMessage());
		}
	}
	
	public void getKey() {
		String[] arstringCommand = new String[]{
			 "cmd ", "/k",  
	             "start", // cmd Shell命令  
	
	             "keytool",  
	             "-genkey", // -genkey表示生成密钥  
	             "-validity", // -validity指定证书有效期(单位：天)，这里是36000天  
	             "36500",  
	             "-keysize",//     指定密钥长度  
	             "1024",  
	             "-alias", // -alias指定别名，这里是ss  
	             "ss",  
	             "-keyalg", // -keyalg 指定密钥的算法 (如 RSA DSA（如果不指定默认采用DSA）)  
	             "RSA",  
	             "-keystore", // -keystore指定存储位置，这里是d:/demo.keystore  
	             "d:/demo.keystore",  
	             "-dname",// CN=(名字与姓氏), OU=(组织单位名称), O=(组织名称), L=(城市或区域名称),  
	                         // ST=(州或省份名称), C=(单位的两字母国家代码)"  
	             "CN=(SS), OU=(SS), O=(SS), L=(BJ), ST=(BJ), C=(CN)",  
	             "-storepass", // 指定密钥库的密码(获取keystore信息所需的密码)  
	             "123456",   
	             "-keypass",// 指定别名条目的密码(私钥的密码)  
	             "123456",   
	             "-v"// -v 显示密钥库中的证书详细信息  
		};
		executeCommand(arstringCommand);
	}
	
	 /** 
     * 导出证书文件 
     */  
    public void export() {  
  
        String[] arstringCommand = new String[] {  
  
        "cmd ", "/k",  
                "start", // cmd Shell命令  
  
                "keytool",  
                "-export", // - export指定为导出操作   
                "-keystore", // -keystore指定keystore文件，这里是d:/demo.keystore  
                "d:/demo.keystore",  
                "-alias", // -alias指定别名，这里是ss  
                "ss",  
                "-file",//-file指向导出路径  
                "d:/demo.cer",  
                "-storepass",// 指定密钥库的密码  
                "123456"  
        };  
        executeCommand(arstringCommand);  
      
    }  
}
